package proto

type IMUser struct {
	Id        uint   `json:"id"`
	Status    int    `json:"status"`
	DepartId  uint   `json:"departId"`
	NickName  string `json:"nickName"`
	RealName  string `json:"realName"`
	AvatarUrl string `json:"avatarUrl"`
	TelNumber string `json:"telNumber"`
	SignInfo  string `json:"signInfo"`
}

type IMUserStat struct {
	Id     uint `json:"id"`
	Status int  `json:"status"`
}

type MsgInfo struct {
	MsgId           uint   `json:"msgId"`
	FromSessionId   uint   `json:"fromSessionId"`
	FromSessionType int    `json:"fromSessionType"`
	CreateTime      int64  `json:"createTime"`
	MsgData         string `json:"msgData"`
}

type UnreadInfo struct {
	SessionId     uint   `json:"sessionId"`
	SessionType   uint   `json:"sessionType"`
	UnreadCount   uint   `json:"unreadCnt"`
	LatestMsgId   uint   `json:"latestMsgId"`
	LatestMsgData string `json:"latestMsgData"`
	LatestMsgType int    `json:"latestMsgType"`
}

type DepartInfo struct {
	Id       uint   `json:"id"`
	Name     string `json:"name"`
	ParentId uint   `json:"parentId"`
}

const (
	TYPE_SESSION_USER  = 0
	TYPE_SEESION_GROUP = 1
)

type IMLoginReq struct {
	UserName string `json:"userName"`
	Password string `json:"passWord"`
}

type IMLoginRes struct {
	Code      int    `json:"code"`
	Msg       string `json:"msg"`
	AuthToken string `json:"authToken"`
	UserInfo  IMUser `json:"userInfo"`
}

type IMLogoutReq struct {
	AuthToken string `json:"authToken"`
}

type IMLogoutRes struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

type IMMessage struct {
	FromUserId uint   `json:"fromUserId"`
	SessionId  uint   `json:"sessionId"`
	MsgId      uint   `json:"msgId"`
	MsgData    string `json:"msgData"`
}

type IMMessageAck struct {
	FromUserId uint `json:"fromUserId"`
	SessionId  uint `json:"sessionId"`
	MsgId      uint `json:"msgId"`
}

type IMUnreadMsgCntReq struct {
	ThisUserId uint `json:"userId"`
}

type IMUnreadMsgCntRes struct {
	ThisUserId     uint         `json:"userId"`
	TotalCount     int          `json:"totalCnt"`
	UnreadInfoList []UnreadInfo `json:"unreadInfoList"`
}

type IMGetMsgListReq struct {
	ThisUserId  uint `json:"userId"`
	SessionId   uint `json:"sessionId"`
	SessionType int  `json:"sessionType"`
	MsgIdBegin  int  `json:"msgIdBegin"`
	MsgCount    int  `json:"msgCnt"`
}

type IMGetMsgListRes struct {
	ThisUserId  uint      `json:"userId"`
	MsgInfoList []MsgInfo `json:"msgInfoList"`
}

type IMGetMsgByIdReq struct {
	UserId      uint   `json:"userId"`
	SessionId   uint   `json:"sessionId"`
	SessionType int    `json:"sessionType"`
	MsgIdList   []uint `json:"msgIdList"`
}

type IMGetMsgByIdRes struct {
	UserId      uint      `json:"userId"`
	SessionId   uint      `json:"sessionId"`
	SessionType int       `json:"sessionType"`
	MsgInfoList []MsgInfo `json:"msgInfoList"`
}

type IMGetLastestMsgIdReq struct {
	UserId      uint `json:"userId"`
	SessionId   uint `json:"sessionId"`
	SessionType int  `json:"sessionType"`
}

type IMGetLastestMsgIdRes struct {
	UserId       uint `json:"userId"`
	SessionId    uint `json:"sessionId"`
	SessionType  int  `json:"sessionType"`
	LastestMsgId uint `json:"lastestMsgId"`
}

type IMHeartBeatReq struct {
	Msg string `json:"msg"`
}

type IMHeartBeatRes struct {
	Msg string `json:"msg"`
}

type IMKickUser struct {
	UserId uint `json:"userId"`
}

type IMDepartReq struct {
	UserId uint `json:"userId"`
}

type IMDepartRes struct {
	Code       int          `json:"code"`
	DepartList []DepartInfo `json:"departList"`
}

type IMAllUserReq struct {
	LastTime int64 `json:"lastTime"`
}

type IMAllUserRes struct {
	Code     int      `json:"code"`
	UserList []IMUser `json:"userList"`
}

type IMOnlineUserReq struct {
}

type IMOnlineUserRes struct {
	Code       int    `json:"code"`
	UserIdList []uint `json:"userIdList"`
}

type IMUserInfoReq struct {
	ThisUserId uint   `json:"userId"`
	UserIdList []uint `json:"userIdList"`
}

type IMUserInfoRes struct {
	ThisUserId   uint     `json:"userId"`
	UserInfoList []IMUser `json:"userInfoList"`
}

type IMUserStatReq struct {
	ThisUserId uint   `json:"userId"`
	UserIdList []uint `json:"userIdList"`
}

type IMUserStatRes struct {
	ThisUserId   uint         `json:"userId"`
	UserStatList []IMUserStat `json:"userStatList"`
}

type IMChangeAvatarReq struct {
	ThisUserId uint   `json:"userId"`
	AvatarUrl  string `json:"avatarUrl"`
}

type IMChangeAvatarRes struct {
	Code       int  `json:"code"`
	ThisUserId uint `json:"userId"`
}

type IMChangeAvatarNotify struct {
	UserId    uint   `json:"userId"`
	AvatarUrl string `json:"avatarUrl"`
}

type IMChangeSignInfoReq struct {
	ThisUserId uint   `json:"userId"`
	SignInfo   string `json:"signInfo"`
}

type IMChangeSignInfoRes struct {
	Code       int  `json:"code"`
	ThisUserId uint `json:"userId"`
}

type IMChangeSignInfoNotify struct {
	ThisUserId uint   `json:"userId"`
	SignInfo   string `json:"signInfo"`
}

type IMUserInfoNameReq struct {
	UserName string `json:"userName"`
}

type IMUserInfoNameRes struct {
	Data IMUser `json:"data"`
}
